package de.dhbw.tit07.progress.internal; import java.util.ArrayList; import java.util.List; import de.dhbw.tit07.progress.model.WorkUnit; public abstract class InternalProgress implements WorkUnit { private final List<InternalProgress> children; private double completionPercentage; public InternalProgress() { super(); this.children = new ArrayList<InternalProgress>(); this.completionPercentage = 0.0d; } @Override public WorkUnit[] createParts(int partCount) { WorkUnit[] result = new WorkUnit[partCount]; for (int i = 0; i < result.length; i++) { result[i] = addChild(); } return result; } protected InternalProgress addChild() { InternalProgress newChild = createChildProgress(); this.children.add(newChild); return newChild; } protected List<InternalProgress> getChildren() { return this.children; } protected double getChildFactor() { return (1.0d / this.children.size()); } protected abstract InternalProgress createChildProgress(); protected void addAsCompleted() { this.completionPercentage += getChildFactor(); } protected abstract void reportPartialCompletion(double percentage); protected double getCompletionPercentage() { return this.completionPercentage; } }